package cn.vehicle.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import cn.vehicle.domains.entity.SysRolePermissionEntity;
import cn.vehicle.mapper.SysRolePermissionMapper;
import cn.vehicle.service.SysRolePermissionService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 角色权限关系服务实现类
 * <p>
 * 负责角色与权限之间关联关系的维护操作，包括新增、批量插入与删除。
 * 通过 {@link SysRolePermissionMapper} 实现与数据库的交互，是角色权限管理的核心逻辑层。
 * </p>
 *
 * <p>主要职责：</p>
 * <ul>
 *   <li>在角色更新权限时，清除旧权限并批量插入新权限；</li>
 *   <li>保证操作原子性，使用事务回滚机制避免数据不一致；</li>
 *   <li>为业务层（Biz 层）提供角色权限绑定的基础服务。</li>
 * </ul>
 */
@Service
public class SysRolePermissionServiceImpl implements SysRolePermissionService {
    @Resource
    private SysRolePermissionMapper sysRolePermissionMapper;

    /**
     * 新增或更新角色权限关联
     * <p>删除指定角色的旧权限，并批量插入新权限集合。</p>
     *
     * @param roleId 角色主键ID
     * @param list 新的角色权限关系列表
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addRolePermissions(Long roleId, List<SysRolePermissionEntity> list) {
        // 删除角色原有的权限记录，确保不会产生重复绑定
        sysRolePermissionMapper.deletePermissionsByRoleId(roleId);

        // 若新权限列表非空，则执行批量插入操作
        if (CollectionUtil.isNotEmpty(list)) {
            // 批量写入角色与权限的关联关系
            sysRolePermissionMapper.batchInsertRolePermissions(list);
        }
    }
}
